// 输入 12345 返回 12354
// 输入 12354  返回 12435


//为了和原数接近，我们需要尽量保持高位不变，低位在最小的范围内变换顺序。”
//至于变换顺序的范围大小，则取决于当前整数的逆序区域。”


//1. 从后向前查看逆序区域，找到逆序区域的前一位，也就是数字置换的边界。
//2. 让逆序区域的前一位和逆序区域中大于它的最小的数字交换位置。
//3. 把原来的逆序区域转为顺序状态

function findNearestNumber(numbers){
    // 1.从后向前查看逆序区域，找到逆序区域的前一位，也就是数字置换的边界
    let index = findTransferPoint(numbers);
    // 如果数字置换边界是0，说明整个数组已经逆序，无法得到更大的相同数字组成的整数 返回null
    if(index==0){
        return null
    }
    // 2.把逆序区域的前一位和逆序区域中刚刚大于它的数字交换位置
    let numbersCopy = [...numbers];
    exchangeHead(numbersCopy,index);
    // 3.把原来的逆序区域转为顺序
    return reverse(numbersCopy,index);
}


function findTransferPoint(numbers){
    for(let i=numbers.length-1;i>0;i--){
        if(numbers[i]>numbers[i-1]){
            return i;
        }
    }
    return 0;
}
function exchangeHead(numbers,index){
    let head = numbers[index-1];
    for (let i=numbers.length;i>0;i--){
        if(head <numbers[i]){
            numbers[index-1]=numbers[i];
            numbers[i]=head;
            break;
        }
    }
    return numbers;
}
function reverse(numbers,index){
    let a= numbers.slice(0,index)
    let b= numbers.slice(index).sort(function(a,b){return a-b})
    console.log("a",a)
    console.log("b",b)
    let nums = [...a,...b];
    return nums;
}

// let num1=[1,2,3,4,5]
// console.log(findNearestNumber(num1));

let num2=[1,2,3,5,4]
console.log(findNearestNumber(num2));